#include "Head.h"

// 初始化顺序表
Order_Flight_Data *Init_Sql_list()
{
    // 开辟动态内存
    Order_Flight_Data *L = (Order_Flight_Data *)malloc(sizeof(Order_Flight_Data));
    if (L == NULL)
    {
        ERRLOG("动态空间L开辟失败!");
        return NULL;
    }

    // 开辟数据动态空间
    L->Order_Data = (Flight_data *)malloc(Max * sizeof(Flight_data));
    if (L == NULL)
    {
        ERRLOG("动态空间L->Order_Data开辟失败!");
        return NULL;
    }

    L->len = 0;
    return L;
}

// 销毁动态内存空间
void Free_Sql_list(Order_Flight_Data **L)
{
    // 安全判断
    if (*L == NULL)
    {
        ERRLOG("动态空间L开辟失败!");
        return;
    }
    if ((*L)->Order_Data == NULL)
    {
        ERRLOG("动态空间L->Order_Data开辟失败!");
        return;
    }

    // 先销毁(*L)->Order 后销毁*L (因为 (*L)->Order 存在 *L 内)
    free((*L)->Order_Data);
    (*L)->Order_Data = NULL;

    free(*L);
    *L = NULL;
}

// 插入
void Insert_Sql_list(Order_Flight_Data *L, Flight_data data)
{
    // 安全判断
    if (L == NULL)
    {
        ERRLOG("动态空间L开辟失败!");
        return;
    }
    if (L->Order_Data == NULL)
    {
        ERRLOG("动态空间L->Order_Data开辟失败!");
        return;
    }

    // 判满
    if (L->len == Max)
    {
        printf("顺序表已满");
        return;
    }

    L->Order_Data[L->len] = data;
    L->len++;
    return;
    
    
}

// 尾删
void Tail_Del_Sql_list(Order_Flight_Data *L)
{
    // 安全判断
    if (L == NULL)
    {
        ERRLOG("动态空间L开辟失败!");
        return;
    }
    if (L->Order_Data == NULL)
    {
        ERRLOG("动态空间L->Order_Data开辟失败!");
        return;
    }

    // 判空
    if (L->len <= 0)
    {
        printf("已无数据可删");
    }
    L->len--;
}

// 任意位置删除
void Del_Sql_list(Order_Flight_Data *L, int pas)
{
    // 安全判断
    if (L == NULL)
    {
        ERRLOG("动态空间L开辟失败!");
        return;
    }
    if (L->Order_Data == NULL)
    {
        ERRLOG("动态空间L->Order_Data开辟失败!");
        return;
    }

    // 判空
    if (L->len <= 0)
    {
        printf("已无数据可删");
    }
    //L->len--;

    size_t i;
    for (i = pas; i < L->len; i++)
    {
        L->Order_Data[i] = L->Order_Data[i + 1];
    }
    L->len--;
}

// 遍历顺序表
void Printf_Sql_list(Order_Flight_Data *L)
{
    // 安全判断
    if (L == NULL)
    {
        ERRLOG("动态空间L开辟失败!");
        return;
    }
    if (L->Order_Data == NULL)
    {
        ERRLOG("动态空间L->Order_Data开辟失败!");
        return;
    }

    for (size_t i = 0; i < L->len; i++)
    {
        printf("  %-10d\t%-10s\t%-10s%-10s%-d : %d\t\t%d : %d\t\t%-10s\t%-10d%-5d\t\t  %d\t\t  %-8c\n",
               /*航班                                       飞机机型*/
               L->Order_Data[i].id,                L->Order_Data[i].flighttype,
               /*航班起点站                                 航班终点站*/
               L->Order_Data[i].startcity,         L->Order_Data[i].arrivecity,
               /*起飞时间 时                                起飞时间 分*/
               L->Order_Data[i].starttime[0],      L->Order_Data[i].starttime[1],
               /*到达时间 时                                到达时间 分*/
               L->Order_Data[i].arrivetime[0],     L->Order_Data[i].arrivetime[1],
               /*飞行时间                                   票价*/
               L->Order_Data[i].flytime,           L->Order_Data[i].value,
               /*额定载客量                                 剩余座位数*/
               L->Order_Data[i].maxNUM,            L->Order_Data[i].leftbuyersa,
               /*是否起飞*/
               L->Order_Data[i].whetherfly);
    }
}

//清空顺序表
void Empty_Sql_list(Order_Flight_Data * L)
{
    // 安全判断
    if (L == NULL)
    {
        ERRLOG("动态空间L开辟失败!");
        return;
    }
    if (L->Order_Data == NULL)
    {
        ERRLOG("动态空间L->Order_Data开辟失败!");
        return;
    }

    // 判空
    if (L->len <= 0)
    {
        //printf("已无数据可删");
        return;
    }

    L->len = 0;
    return;
}
